import java.util.*;
public class Main {
    /*给你一个长度为 n 的整数数组 nums ，和一个长度为 m 的整数数组 queries 。
返回一个长度为 m 的数组 answer ，
其中 answer[i] 是 nums 中 元素之和小于等于 queries[i] 的 子序列 的 最大 长度  。
子序列 是由一个数组删除某些元素（也可以不删除）但不改变剩余元素顺序得到的一个数组。*/
    public static int[] check(int[] nums,int[] queries) {
        Arrays.sort(nums);
        int n = nums.length;
        int m = queries.length;
        for(int i=1;i<n;i++){
            nums[i]+=nums[i-1];//每个元素更新为前i的累加值
        }
        for(int i=0;i<m;i++){
            queries[i]=UpperBound(nums,queries[i]+1);//满足<=queries[i]的最小下标
        }
        return queries;
    }
    private static int UpperBound(int[] nums,int queries){
        int n=nums.length;
        int left=0;
        int right=n-1;
        while(left<=right){
            int mid=left+(right-left)/2;
            if(nums[mid]>=queries){
                right=mid-1;
            }
            else
               left=mid+1;
        }
        return left;
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] nums=new int[n];
        for(int i=0;i<n;i++){
            nums[i]=sc.nextInt();
        }
        int m=sc.nextInt();
        int[] queries=new int[m];
        for(int i=0;i<m;i++){
            queries[i]=sc.nextInt();
        }
        int[] answer=check(nums,queries);
        System.out.println(Arrays.toString(answer));
    }
}